package com.juejin.www.dao;

import com.juejin.www.model.DO.Audit;
import com.juejin.www.model.DO.User;
import com.juejin.www.model.DTO.AuditDTO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author Jacky
 */
@Mapper
public interface AdminDao {

    /**
     * 获取审核列表
     * @param begin 开始索引
     * @param pageSize 查询数目
     * @param isAudited 是否审核
     * @return 审核列表
     */
    @Select("select * from audits where is_audited=#{isAudited} order by create_time desc limit #{begin},#{pageSize}")
    List<Audit> getAudits(Integer begin,Integer pageSize,Integer isAudited);

    /**
     * 获取审核列表数目
     * @param isAudited 是否审核
     * @return 总数
     */
    @Select("select count(*) from audits where is_audited=#{isAudited}")
    Integer getAuditsTotalCount(Integer isAudited);

    /**
     * 获取未审核数
     * @return 未审核数
     */
    @Select("select count(*) from audits where is_audited=0")
    Integer getIsNotAuditedCount();

    /**
     * 添加审核申请
     * @param audit 审核实体
     */
    @Insert("insert into audits(id, title, content, type, author, is_audited, auditor, result, opinion,create_time,audit_time) " +
            "values (null,#{title},#{content},#{type},#{author},#{isAudited},#{auditor},#{result},#{opinion},#{createTime},#{auditTime})")
    void addAudit(Audit audit);

    /**
     * 审核
     * @param auditDTO 审核实体
     */
    @Update("update audits set is_audited=1,auditor=#{auditor},result=#{result},opinion=#{opinion},audit_time=#{auditTime} where id=#{id}")
    void audit(AuditDTO auditDTO);

    /**
     * 通过id获取审核实体
     * @param id 审核id
     * @return 审核实体
     */
    @Select("select * from audits where id = #{id}")
    Audit getById(Integer id);

    /**
     * 封禁用户
     * @param id 用户id
     */
    @Update("update users set status=0 where id=#{id}")
    void lockUser(Integer id);

    /**
     * 解封用户
     * @param id 用户id
     */
    @Update("update users set status=1 where id=#{id}")
    void unlockUser(Integer id);

    /**
     * 超级管理员添加管理员
     * @param user 用户实体
     */
    @Insert("insert into users(id, username, password, salt, name, status, create_time, update_time) " +
            "values (null,#{username},#{password},#{salt},#{name},1,now(),now())")
    void addAdmin(User user);
}
